iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
4

什麼是C#?

  • C#,發音為"C Sharp"。源自於C語言,是一種基於.NET框架、物件導向型(object-oriented)的程式語言。跟Java的寫法很像。
  • C#為型別安全(Type-Safe)、強型別的語言,指的是每一個物件都必須指定型別。使用前你要先幫它規定好,該是整數就是整數,該是字串就是字串,要把整數當成字串用,就需要使用轉型。在各型別的繼承關係中,最上層的型別是Object,意即,所有的東西都是物件
  • C#副檔名為.cs,應用範圍廣,如網頁、大型作業系統、小型嵌入式系統...等皆可以用其來開發。
  • 可以運行在Windows、Mac OS、Linux等常見的作業系統平台上,但須依賴.NET Framework或是.NET core SDK執行。
  • C#為編譯式語言(※註1),其運作流程如下圖:
    原始碼(source code)→編譯器→中繼語言(MSIL)→CLR→電腦看得懂的語言(Native code)
    https://ithelp.ithome.com.tw/upload/images/20190902/20120055gjOGx3t2dL.png
    (圖片來源:Microsoft C# 語言和 .NET Framework 簡介)

各階段名詞解釋:

  • C#專案:裡面包含自己寫的程式碼(原始碼)以及引用了哪一些類別...等
  • 原始碼(source code):就是自己寫的程式碼,C#是一種高階語言,也就是比較符合人類思考邏輯,但電腦看不懂的語言。
  • 編譯器:把人類看得懂的語言,轉成電腦看得懂的語言的東西。C#→電腦看得懂的語言,這個動作就叫做編譯。C#編譯後的檔案為exe檔或是dll檔(一次做完)
  • MSIL (Microsoft Intermediate Language):中繼語言。為了達到跨語言(C++/C#/VB)的目標,會先將原始碼編譯成為中介碼,然後再藉由.NET執行環境的CLR轉成Native code,這樣不論是使用哪一種語言都可以執行使用,此部分與JAVA的JDK設計類似。詳細資料可以參考MSIL 簡介
  • 託管程式碼 (Managed Code)指的是由高階語言寫成,編譯成中繼碼後,經由CLR進行管理,託管給CLR,故又稱作託管程式碼。(註2)
  • CLR( Common Language Runtime ):是 .NET Framework 的虛擬機器元件 (virtual machine component),用來管理執行中的.NET程序。
    • 具有及時編譯功能(JIT,Just-in-time compilation)(註3),執行時一行一行(不是一次做完)將中繼語言轉成Native code。
    • 具有記憶體管理、例外處理、型別安全、垃圾回收(GC)(註4)等功能。
    • 包含基礎類別函式庫 (BCL,Base Class Libraries),用來提供 .NET 執行時期需要的程式基礎,如組件 (Assembly)、型別定義(Type)、命名空間...等,也就是using System命名空間下的所有類別。
    • .NET Frame Work類別庫中是FLC(Framework Class Libraries),用來補足BCL不足的地方。我們自己也可以建立自己的類別庫進行日後調用

所以C#跟.NET是什麼關係?

C#是一個程式語言, .NET則是平台框架,目前有 Windows平台專屬的.NET Framework 與跨平台的 .NET Core 兩種。目前兩個框架的支援性差距逐漸縮小中。

※註1:程式語言有分為直譯式與編譯式兩種,直譯式語言執行時會將程式碼一行一行變為機器碼並執行,執行速度較慢,但除錯速度較快,不需要編譯成中間碼,不能獨立執行。編譯式由於已經先編譯過了,執行速度較快,但除錯速度較慢,需要編譯成中間碼,可以獨立執行。

※註2:非託管程式碼是指由C/C++較底層的語言寫出的程式碼,譬如指標...等,由於未託管給CLR,需要由Programer自行回收分配的記憶體。

※註3:即時編譯是建立在虛擬機上的一種動態編譯編譯的方式,先將程式編譯為中間碼,在執行期以一行一行去翻譯為機器碼,結合了編譯式與直譯式特色。

※註4:Garbage Collection:一種自動記憶體管理的機制,目標是回收不再使用的物件、釋出其記憶體空間,讓記憶體可供未來的配置使用。另外也可以確保某個物件無法使用另一個物件的內容,藉以提供記憶體安全性。

參考資料

C# 語言和 .NET Framework 簡介
釐清 CLR、.NET、C#、Visual Studio、ASP.NET 各版本之間的關係


上一篇
Day01-開始自學的偉大航道-C#自學資源、自學心得
下一篇
Day03-C# IDE-Visual Studio安裝教學(2019版)及新增專案
系列文
C#與ASP.Net入門-我要成為工程師!!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Jason
iT邦新手 4 級 ‧ 2021-09-22 10:19:01

電腦只認01, 如何從01一路翻譯到接近人類語言的程式?
程式語言是怎麼製作出來,底層是什麼,是低偕語言寫的嗎?
我們寫的語言是透過那個翻譯器,而這個翻譯器又是怎麼製作出來,他如何將if switch一層一層轉成01,微軟寫的windows常常會一直更新,但像java c# javascript,他們要增加新功能或發現有bug又要如何更新,還是他們一出來就是百分之百正確

我要留言

立即登入留言